﻿using System;
using System.Collections.Generic;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Servico.Bovespa.Contabil.Service.ServiceContract;

namespace Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation
{
    /// <summary>
    /// Service.ServiceImplementation Class - ContaContabilFaturamento
    /// </summary>
    [SinacorServiceBehavior]
    public class ContaContabilFaturamento : IContaContabilFaturamento
    {
        #region AlterarContaContabilFaturamento

        /// <summary>
        /// Serviço irá alterar o ContaContabilFaturamento informado como parâmetro
        /// </summary>
        /// <param name="request">DataContract.Request.ContaContabilFaturamentoRequest</param>
        public void AlterarContaContabilFaturamento(DataContract.Request.ContaContabilFaturamentoRequest request)
        {
            new BusinessLogic.ContaContabilFaturamento().AlterarContaContabilFaturamento
               (
                   new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToContaContabilFaturamento(request)
               );
        }

        #endregion

        #region AlterarContasContabeisFaturamento

        /// <summary>
        /// Serviço irá alterar uma coleção de ContasContabeisFaturamento informados como parâmetro
        /// </summary>
        /// <param name="request">Lista de objetos do tipo DataContract.Request.ContaContabilFaturamentoRequest</param>
        public void AlterarContasContabeisFaturamento(List<DataContract.Request.ContaContabilFaturamentoRequest> request)
        {
            new BusinessLogic.ContaContabilFaturamento().AlterarContasContabeisFaturamento
                (
                    new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToContaContabilFaturamento(request)
                );
        }

        #endregion

        #region ConsultarContasContabeisFaturamento

        /// <summary>
        /// Serviço irá Consultar uma lista de ContasContabeisFaturamento, utilizando o parâmetro informado
        /// </summary>
        /// <param name="request">DataContract.Request.FiltroContaContabilFaturamentoRequest</param>
        /// <returns>Lista de objetos do tipo DataContract.Response.ContaContabilFaturamentoResponse</returns>
        public List<DataContract.Response.ContaContabilFaturamentoResponse> ConsultarContasContabeisFaturamento(DataContract.Request.FiltroContaContabilFaturamentoRequest request)
        {
            return new Translator.BusinessEntityToDataContract.ContaContabilFaturamento().ToContaContabilFaturamentoResponse
                       (
                           new BusinessLogic.ContaContabilFaturamento().ConsultarContasContabeisFaturamento
                               (
                                   new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToFiltroContaContabilFaturamento(request)
                               )
                       );
        }

        #endregion

        #region ConsultarPlanosContas

        /// <summary>
        /// Consulta as contas cadastradas no plano de contas
        /// </summary>
        /// <param name="request">DataContract.Request.FiltroPlanoContaRequest</param>
        /// <returns>Lista de objetos do tipo DataContract.Response.PlanoContaResponse</returns>
        public List<DataContract.Response.PlanoContaResponse> ConsultarPlanosContas(DataContract.Request.FiltroPlanoContaRequest request)
        {
            return new Translator.BusinessEntityToDataContract.ContaContabilFaturamento().ToPlanoContaResponse
                       (
                           new BusinessLogic.PlanoConta().ConsultarPlanosContas
                               (
                                   new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToFiltroPlanoConta(request)
                               )
                       );
        }

        #endregion

        #region ExcluirContaContabilFaturamento

        /// <summary>
        /// Serviço irá excluir o ContaContabilFaturamento informado como parâmetro
        /// </summary>
        /// <param name="request">DataContract.Request.FiltroContaContabilFaturamentoChaveRequest</param>
        public void ExcluirContaContabilFaturamento(DataContract.Request.FiltroContaContabilFaturamentoChaveRequest request)
        {
            new BusinessLogic.ContaContabilFaturamento().ExcluirContaContabilFaturamento
                (
                    new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToFiltroContaContabilFaturamento(request)
                );
        }

        #endregion

        #region ExcluirContasContabeisFaturamento

        /// <summary>
        /// Serviço irá excluir uma coleção de ContasContabeisFaturamento informados como parâmetro
        /// </summary>
        /// <param name="request">Lista de objetos do tipo DataContract.Request.FiltroContaContabilFaturamentoChaveRequest</param>
        public void ExcluirContasContabeisFaturamento(List<DataContract.Request.FiltroContaContabilFaturamentoChaveRequest> request)
        {
            new BusinessLogic.ContaContabilFaturamento().ExcluirContasContabeisFaturamento
                (
                    new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToFiltroContaContabilFaturamento(request)
                );
        }

        #endregion

        #region ExecutarTransacoesContaContabilFaturamento

        /// <summary>
        /// Serviço irá excluir/incluir/alterar os objetos ContaContabilFaturamento informados como parâmetro
        /// </summary>
        /// <param name="exclusaoList">Lista de objetos do tipo DataContract.Request.FiltroContaContabilFaturamentoChaveRequest</param>
        /// <param name="inclusaoList">Lista de objetos do tipo DataContract.Request.ContaContabilFaturamentoRequest</param>
        /// <param name="alteracaoList">Lista de objetos do tipo DataContract.Request.ContaContabilFaturamentoRequest</param>
        public void ExecutarTransacoesContaContabilFaturamento(List<DataContract.Request.FiltroContaContabilFaturamentoChaveRequest> exclusaoList,
                                                        List<DataContract.Request.ContaContabilFaturamentoRequest> inclusaoList,
                                                        List<DataContract.Request.ContaContabilFaturamentoRequest> alteracaoList)
        {
            BusinessLogic.ContaContabilFaturamento businessLogic = new BusinessLogic.ContaContabilFaturamento();

            businessLogic.ExcluirContasContabeisFaturamento(new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToFiltroContaContabilFaturamento(exclusaoList));
            businessLogic.IncluirContasContabeisFaturamento(new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToContaContabilFaturamento(inclusaoList));
            businessLogic.AlterarContasContabeisFaturamento(new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToContaContabilFaturamento(alteracaoList));
        }

        #endregion

        #region IncluirContaContabilFaturamento

        /// <summary>
        /// Serviço irá incluir o ContaContabilFaturamento informado como parâmetro
        /// </summary>
        /// <param name="request">DataContract.Request.ContaContabilFaturamentoRequest</param>
        public void IncluirContaContabilFaturamento(DataContract.Request.ContaContabilFaturamentoRequest request)
        {
            new BusinessLogic.ContaContabilFaturamento().IncluirContaContabilFaturamento
               (
                   new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToContaContabilFaturamento(request)
               );
        }

        #endregion

        #region IncluirContasContabeisFaturamento

        /// <summary>
        /// Serviço irá incluir uma coleção de ContasContabeisFaturamento informados como parâmetro
        /// </summary>
        /// <param name="request">Lista de objetos do tipo DataContract.Request.ContaContabilFaturamentoRequest</param>
        public void IncluirContasContabeisFaturamento(List<DataContract.Request.ContaContabilFaturamentoRequest> request)
        {
            new BusinessLogic.ContaContabilFaturamento().IncluirContasContabeisFaturamento
                (
                    new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToContaContabilFaturamento(request)
                );
        }

        #endregion

        #region ObterContaContabilFaturamento

        /// <summary>
        /// Serviço irá Obter o ContaContabilFaturamento informado como parâmetro
        /// </summary>
        /// <param name="request">DataContract.Request.FiltroContaContabilFaturamentoChaveRequest</param>
        /// <returns>DataContract.Response.ContaContabilFaturamentoResponse</returns>
        public DataContract.Response.ContaContabilFaturamentoResponse ObterContaContabilFaturamento(DataContract.Request.FiltroContaContabilFaturamentoChaveRequest request)
        {
            return new Translator.BusinessEntityToDataContract.ContaContabilFaturamento().ToContaContabilFaturamentoResponse
                       (
                           new BusinessLogic.ContaContabilFaturamento().ObterContaContabilFaturamento
                               (
                                   new Translator.DataContractToBusinessEntity.ContaContabilFaturamento().ToFiltroContaContabilFaturamento(request)
                               )
                       );
        }

        #endregion
    }
}
